package com.zsrt.java.ch04;


/**
 * 模拟二叉树 BTree
 * @author zsrt
 *
 */
public class BTree {
	
	/**
	 * 根节点
	 */
	private Node head;
	
	public BTree(Node head){
		this.head = head;
	}
	
	
	
	
	/**
	 * 添加节点
	 * @param parentNode  参照物节点
	 * @param node        要添加的节点
	 */
	public void insertNode(Node parentNode,Node node){
		
		if(parentNode != null){
			
			if(parentNode.getData() > node.getData()){ 
				//左边
				
				if(parentNode.getLeftChildNode() == null){
					//说明左子树为null
					parentNode.setLeftChildNode(node);
				}else{
					//递归调用
					this.insertNode(parentNode.getLeftChildNode(), node);
				}
				
			}else{
				//右边
				if(parentNode.getRightChildNode() == null){
					//说明右子树为null
					parentNode.setRightChildNode(node);
				}else{
					//递归调用
					this.insertNode(parentNode.getRightChildNode(),node);
				}
			}
			
		}
		
		
	}
	
	
	/**
	 * 拿到二叉树的最大值
	 * @param parentNode 参照物节点
	 * @return
	 */
	public Node getMax(Node parentNode){
		
		while(parentNode != null){
			
			if(parentNode.getRightChildNode() == null){
				return parentNode;
			}else{
				return getMax(parentNode.getRightChildNode());
			}
			
		}
		return null;
		
	}
	
	/**
	 * 先根遍历  （中根遍历  后根遍历）  根  左子树  右子树
	 */
	public void printTree(Node parentNode){
		
		if(parentNode != null){
			System.out.println(parentNode.getData());
			
			//打印左子树
			
			this.printTree(parentNode.getLeftChildNode());
			
			//打印右子树
			this.printTree(parentNode.getRightChildNode());
		}
		
	}
	

}
